Re: Поиск объектов
мне его предоставили - как пример сертификата, с которым я должен работать
С сертификатом без ключевой пары многого не сделаешь. Можно только подпись проверять :)
Передайте это тем, кто вам его "предоставил".
Вы не авторизованы. Пожалуйста, войдите или зарегистрируйтесь.
Форум Рутокен → Рутокен на мобильных платформах → Поиск объектов
Чтобы отправить ответ, нужно авторизоваться или зарегистрироваться
мне его предоставили - как пример сертификата, с которым я должен работать
С сертификатом без ключевой пары многого не сделаешь. Можно только подпись проверять :)
Передайте это тем, кто вам его "предоставил".
Этот же класс в описании API 2.*
public class CK_ATTRIBUTE extends Structure {
public CK_ATTRIBUTE(NativeLong type, Pointer pVal, NativeLong ulValLen) {
this.type = type;
this.pValue = pVal;
this.ulValueLen = ulValLen;
}
public NativeLong type;
public Pointer pValue;
public NativeLong ulValueLen; /* in bytes */
}
Использование функций API 1 с использованием CK_ATTRIBUTE - приложение просто падает
Использование API 2 - все работает , но примеров нет . Например нет примера как создавать Key на базе шаблона, который содержит массив из 8 CK_ATTRIBUTE, при этом используется конструктор CK_ATTRIBUTE с pValue на String переменную.
Вот еще пример
API 1:
int C_FindObjectsInit
(
int hSession, /* the session's handle */
CK_ATTRIBUTE pTemplate, /* attribute values to match */
int ulCount /* attrs in search template */
);
API 2:
NativeLong C_FindObjectsInit
(
NativeLong hSession, /* the session's handle */
CK_ATTRIBUTE[] pTemplate, /* attribute values to match */
NativeLong ulCount /* attrs in search template */
);
пример API 1 - 100% падение приложение
мы с трудом, но разобрались, о чем вы пишете.
То, что вы называете API 1 - это примеры для Java
То, что вы называете API 2 - это пример для Android
Платформа Android и платформа Java это 2 разные вещи и 2 разные платформы.
Их объединяет язык Java, но не более.
Объясните, что вы пытаетесь сделать и что именно у вас не получается?
мы с трудом, но разобрались, о чем вы пишете.
То, что вы называете API 1 - это примеры для Java
То, что вы называете API 2 - это пример для AndroidПлатформа Android и платформа Java это 2 разные вещи и 2 разные платформы.
Их объединяет язык Java, но не более.Объясните, что вы пытаетесь сделать и что именно у вас не получается?
Если возможно выложить сюда или лучше в SDK примеры для Android всех функций интерфейса Pkcs11.
Если нельзя - то хотя бы основных:
- C_Encrypt...
- C_Decrypt...
- С_Sign...
- C_Digest...
- C_GenerateKeyPair
- и не забыть главное - все конструкторы для CK_ATTRIBUTE
Кстати в SDK выложен пример для Android, который почему-то использует по вашим словам - примеры для Java. И он работает. Может убрать данный пример из SDK и выложить пример именно для Android.
Уточняю файл SDK - rutokenSDK-21-2014-09-17_19-31-27.zip
Каталог - \Samples\Mobile\Android\
Олег, к сожалению, у нас ничего другого нет.
Нужно как то выкручиваться и программировать самостоятельно, тем более образцы есть.
Повторю на всякий случай:
1) SDK тут - https://www.rutoken.ru/developers/sdk/
2) пример для Android тут https://drive.google.com/folderview?id= … sp=sharing
3) https://github.com/AktivCo/rutoken-demobank-android
4) документация: http://dev.rutoken.ru/display/PUB/Public+Home
Как передать "строку" из java
ВНИМАНИЕ! Это грубый пример и так делать нельзя!
(строковые данные должны быть прохешированы, а лишь затем отправлены на подпись (см. подробные примеры для Си)
но неважно, меняем этот файл
https://github.com/AktivCo/rutoken-demo … Token.java
String s = "Sign Me";
byte data[] = s.getBytes();
NativeLong rv = mPkcs11.C_SignInit(mSession, mechanism, keyHandle);
if (!rv.equals(Pkcs11Constants.CKR_OK)) throw Pkcs11Exception.exceptionWithCode(rv);
rv = mPkcs11.C_Sign(mSession, data, new NativeLong(data.length), null, count);
if (!rv.equals(Pkcs11Constants.CKR_OK)) throw Pkcs11Exception.exceptionWithCode(rv);
byte signature[] = new byte[count.getValue().intValue()];
rv = mPkcs11.C_Sign(mSession, data, new NativeLong(data.length), signature, count);
if (!rv.equals(Pkcs11Constants.CKR_OK)) throw Pkcs11Exception.exceptionWithCode(rv);
return new Pkcs11Result(signature);
В итоге мы передаем string в наш интерфейс, как вы и хотели.
я уже написал - завтра буду тестировать. Просто мне непонятно - зачем приплетать целую библу JNA, когда все можно было сделать через byte[]
Просто 5 лет назад писал Raw драйвера на Android для принтеров - спокойно обошелся одними byte[].
Чтобы отправить ответ, нужно авторизоваться или зарегистрироваться
Форум Рутокен → Рутокен на мобильных платформах → Поиск объектов