Re: Поиск объектов

Oleg Shishkin пишет:

мне его предоставили - как пример сертификата, с которым я должен работать

С сертификатом без ключевой пары многого не сделаешь. Можно только подпись проверять :)
Передайте это тем, кто вам его "предоставил".

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 */
}

Re: Поиск объектов

Использование функций API 1 с использованием CK_ATTRIBUTE - приложение просто падает
Использование API 2 - все работает , но примеров нет . Например нет примера как создавать Key на базе шаблона, который содержит массив из 8 CK_ATTRIBUTE, при этом используется конструктор CK_ATTRIBUTE с pValue на String переменную.

Re: Поиск объектов

Вот еще пример
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% падение приложение

Re: Поиск объектов

мы с трудом, но разобрались, о чем вы пишете.

То, что вы называете API 1 - это примеры для Java
То, что вы называете API 2 - это пример для Android

Платформа Android и платформа Java это 2 разные вещи и 2 разные платформы.
Их объединяет язык Java, но не более.

Объясните, что вы пытаетесь сделать и что именно у вас не получается?

(2015-10-07 19:26:13 отредактировано Oleg Shishkin)

Re: Поиск объектов

Кирилл Мещеряков пишет:

мы с трудом, но разобрались, о чем вы пишете.

То, что вы называете 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.

Re: Поиск объектов

Уточняю файл SDK - rutokenSDK-21-2014-09-17_19-31-27.zip
Каталог - \Samples\Mobile\Android\

Re: Поиск объектов

Олег, к сожалению, у нас ничего другого нет.
Нужно как то выкручиваться и программировать самостоятельно, тем более образцы есть.
Повторю на всякий случай:
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

Re: Поиск объектов

Как передать "строку" из 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 в наш интерфейс, как вы и хотели.

(2015-10-22 00:52:02 отредактировано Oleg Shishkin)

Re: Поиск объектов

я уже написал - завтра буду тестировать. Просто мне непонятно - зачем приплетать целую библу JNA, когда все можно было сделать через byte[]
Просто 5 лет назад писал Raw драйвера на Android для принтеров - спокойно обошелся одними byte[].