Re: подпись pdf файла на мобильном устройстве

Разработчики дали ответ:

Чтобы использовать программный хеш нужно в параметре механизма хеширования, который передается в C_DigestInit, указать OID функции хеширования и его длину.

Значения OID'ов для разных ГОСТов:

byte[] GOSTR3411_OID = new byte[]{0x06, 0x07, 0x2a, (byte)0x85, 0x03, 0x02, 0x02, 0x1e, 0x01};
byte[] GOSTR3411_12_256_OID = new byte[]{ 0x06, 0x08, 0x2A, (byte)0x85, 0x03, 0x07, 0x01, 0x01, 0x02, 0x02 };
byte[] GOSTR3411_12_512_OID = new byte[] { 0x06, 0x08, 0x2A, (byte)0x85, 0x03, 0x07, 0x01, 0x01, 0x02, 0x03 };

Вообще эти константы в (строковом представлении) уже есть в Bouncy Castle, и можно взять их оттуда (классы CryptoProObjectIdentifiers, RosstandartObjectIdentifiers)

пример кода:

byte[] oid = new byte[] {0x06, 0x07, 0x2a, (byte) 0x85, 0x03, 0x02, 0x02, 0x1e, 0x01};
Memory parameter = new Memory(oid.length);
parameter.write(0, oid, 0, oid.length);
CK_MECHANISM mechanism = new CK_MECHANISM(new NativeLong(RtPkcs11Constants.CKM_GOSTR3411), parameter, new NativeLong(parameter.size()));

NativeLong rv = mPkcs11.C_DigestInit(new NativeLong(mSessionHandle), mechanism);

Re: подпись pdf файла на мобильном устройстве

Ксения Шаврова, большое спасибо за ответы вам и разработчикам, все получилось!