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);