Статус: Участник
Группы: Участники
Зарегистрирован: 09.01.2014(UTC) Сообщений: 25 Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
При попытки подписи небольшого (16 байт) куска данных происходит падение. Сертификат и ключ с заданым _keyAlias существуют Код, вызывающий падение
Код:
public String getSign(byte[] data, String pin, int slotNum) throws ModuleException
{
String keyStoreType = JCSP.HD_STORE_NAME;
Log.i(TAG, "Default container type: " + keyStoreType);
// Загрузка ключа и сертификата. Всегда используем
// только провайдер JCSP (2001).
byte[] sign = new byte[0];
try
{
X509Certificate certificate;
PrivateKey privateKey;
KeyStore keyStore =
KeyStore.getInstance(keyStoreType, JCSP.PROVIDER_NAME);
keyStore.load(null, null);
/*
KeyStore.ProtectionParameter protectedParam =
new KeyStore.PasswordProtection(stringToChars(pin));
KeyStore.Entry entry = keyStore.getEntry(_keyAlias, protectedParam);
JCPPrivateKeyEntry keyEntry = (JCPPrivateKeyEntry) entry;
privateKey = keyEntry.getPrivateKey();
certificate = (X509Certificate) keyEntry.getCertificate();
*/
privateKey = (PrivateKey) keyStore.getKey(_keyAlias, stringToChars(pin));
certificate = (X509Certificate) keyStore.getCertificate(_keyAlias);
// Отображение информации о ключе.
if (privateKey == null || certificate == null)
{
throw new Exception("Private key or/and certificate is null.");
} // if
else
{
Log.i(TAG, "Certificate: " + certificate.getSubjectDN());
} // else
final String privateKeyAlgorithm = privateKey.getAlgorithm();
String signAlgorithm = JCP.GOST_EL_SIGN_NAME; //mb GOST_SIGN_NAME
if (privateKeyAlgorithm.equalsIgnoreCase(JCP.GOST_EL_2012_256_NAME))
{
signAlgorithm = JCP.GOST_SIGN_2012_256_NAME;
}
else if (privateKeyAlgorithm.equalsIgnoreCase(JCP.GOST_DH_2012_256_NAME))
{
signAlgorithm = JCP.GOST_SIGN_DH_2012_256_NAME;
}
else if (privateKeyAlgorithm.equalsIgnoreCase(JCP.GOST_EL_2012_512_NAME))
{
signAlgorithm = JCP.GOST_SIGN_2012_512_NAME;
}
else if (privateKeyAlgorithm.equalsIgnoreCase(JCP.GOST_DH_2012_512_NAME))
{
signAlgorithm = JCP.GOST_SIGN_DH_2012_512_NAME;
}
Log.i(TAG, "Init Signature: " + signAlgorithm);
Signature sn = Signature.getInstance(signAlgorithm, JCSP.PROVIDER_NAME);
Log.i(TAG, "Init signature by private key: " + privateKey);
sn.initSign(privateKey);
sn.update(data);
// Формируем подпись.
sign = sn.sign();
} catch (SignatureException e)
{
e.printStackTrace();
} catch (InvalidKeyException e)
{
e.printStackTrace();
} catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
} catch (NoSuchProviderException e)
{
e.printStackTrace();
} catch (CertificateException e)
{
e.printStackTrace();
} catch (UnrecoverableEntryException e)
{
e.printStackTrace();
} catch (KeyStoreException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
} catch (Exception e)
{
e.printStackTrace();
}
return Base64.encodeToString(sign, Base64.DEFAULT);
}
Дамп
Код:
01-23 17:49:06.704: INFO/DEBUG(16639): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
01-23 17:49:06.704: INFO/DEBUG(16639): Build fingerprint: 'samsung/espressorfxx/espressorf:4.1.2/JZO54K/P3100XXCLL2:user/release-keys'
01-23 17:49:06.704: INFO/DEBUG(16639): pid: 16916, tid: 16984, name: AsyncTask #4 >>> ru.example.jctest <<<
01-23 17:49:06.704: INFO/DEBUG(16639): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000014
01-23 17:49:06.868: INFO/DEBUG(16639): r0 00000000 r1 00000000 r2 41242d90 r3 4081fc98
01-23 17:49:06.868: INFO/DEBUG(16639): r4 00000000 r5 39f00009 r6 5f6063f8 r7 0000012d
01-23 17:49:06.868: INFO/DEBUG(16639): r8 00000000 r9 00000000 sl 00000000 fp 57cceae0
01-23 17:49:06.868: INFO/DEBUG(16639): ip 41242960 sp 5f606238 lr 407c4ec3 pc 407ce82a cpsr 60000030
01-23 17:49:06.868: INFO/DEBUG(16639): d0 7470656378456569 d1 7574616e6769536f
01-23 17:49:06.868: INFO/DEBUG(16639): d2 776f646e69772f6e d3 3b6e69505053433b
01-23 17:49:06.868: INFO/DEBUG(16639): d4 72646e612e72656b d5 737070612e64696f
01-23 17:49:06.868: INFO/DEBUG(16639): d6 696f72646873732e d7 3eaaaaab3f800000
01-23 17:49:06.868: INFO/DEBUG(16639): d8 0000000000000000 d9 0000000000000000
01-23 17:49:06.868: INFO/DEBUG(16639): d10 0000000000000000 d11 0000000000000000
01-23 17:49:06.868: INFO/DEBUG(16639): d12 0000000000000000 d13 0000000000000000
01-23 17:49:06.868: INFO/DEBUG(16639): d14 0000000000000000 d15 0000000000000000
01-23 17:49:06.868: INFO/DEBUG(16639): d16 000000c141eae3a8 d17 000000c1423d6e88
01-23 17:49:06.868: INFO/DEBUG(16639): d18 0000000003d78d20 d19 0000000000000001
01-23 17:49:06.868: INFO/DEBUG(16639): d20 0000000000000000 d21 0000000000000000
01-23 17:49:06.868: INFO/DEBUG(16639): d22 0000000000000000 d23 0000000000000000
01-23 17:49:06.868: INFO/DEBUG(16639): d24 3ff0000000000000 d25 3ff0000000000000
01-23 17:49:06.868: INFO/DEBUG(16639): d26 0000000000000000 d27 411ffcb800000000
01-23 17:49:06.868: INFO/DEBUG(16639): d28 8000000000000000 d29 3ff0000000000000
01-23 17:49:06.868: INFO/DEBUG(16639): d30 3ff0000000000000 d31 3ff0000000000000
01-23 17:49:06.868: INFO/DEBUG(16639): scr 80000013
01-23 17:49:06.868: INFO/DEBUG(16639): backtrace:
01-23 17:49:06.868: INFO/DEBUG(16639): #00 pc 0005482a /system/lib/libdvm.so (StringObject::utfLength() const+53)
01-23 17:49:06.868: INFO/DEBUG(16639): #01 pc 0004aebf /system/lib/libdvm.so
01-23 17:49:06.868: INFO/DEBUG(16639): #02 pc 002502c0 /data/data/ru.cprocsp.ACSP/lib/libcspjni.so (JniQueryPin+572)
01-23 17:49:06.868: INFO/DEBUG(16639): stack:
01-23 17:49:06.876: INFO/DEBUG(16639): 5f6061f8 00000000
01-23 17:49:06.876: INFO/DEBUG(16639): 5f6061fc 407c6885 /system/lib/libdvm.so
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606200 5f606210
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606204 5f606244
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606208 5f606234
01-23 17:49:06.876: INFO/DEBUG(16639): 5f60620c 00000000
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606210 5f60623c
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606214 39f00009
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606218 5f6063f8
01-23 17:49:06.876: INFO/DEBUG(16639): 5f60621c 407c2ecd /system/lib/libdvm.so
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606220 5f60623c
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606224 41242d90
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606228 00000000
01-23 17:49:06.876: INFO/DEBUG(16639): 5f60622c 39f00009
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606230 df0027ad
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606234 00000000
01-23 17:49:06.876: INFO/DEBUG(16639): #00 5f606238 41242d90
01-23 17:49:06.876: INFO/DEBUG(16639): ........ ........
01-23 17:49:06.876: INFO/DEBUG(16639): #01 5f606238 41242d90
01-23 17:49:06.876: INFO/DEBUG(16639): 5f60623c 41242940
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606240 5f606348
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606244 5ee082c4 /data/data/ru.cprocsp.ACSP/lib/libcspjni.so (JniQueryPin+576)
01-23 17:49:06.876: INFO/DEBUG(16639): #02 5f606248 00000002
01-23 17:49:06.876: INFO/DEBUG(16639): 5f60624c 39f00009
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606250 ffffffff
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606254 57cce110 /dev/ashmem/dalvik-LinearAlloc (deleted)
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606258 5f4febac
01-23 17:49:06.876: INFO/DEBUG(16639): 5f60625c 41242d90
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606260 00000000
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606264 5f6063f8
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606268 5f606330
01-23 17:49:06.876: INFO/DEBUG(16639): 5f60626c 5f606348
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606270 00000000
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606274 00000018
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606278 578cfee8
01-23 17:49:06.876: INFO/DEBUG(16639): 5f60627c 57824238
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606280 578242f0
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606284 5eebd76c /data/data/ru.cprocsp.ACSP/lib/libcspjni.so (CPQueryPin+96)
01-23 17:49:06.876: INFO/DEBUG(16639): memory near r2:
01-23 17:49:06.876: INFO/DEBUG(16639): 41242d70 00000000 00000000 00000000 00000000 ................
01-23 17:49:06.876: INFO/DEBUG(16639): 41242d80 00000000 00000000 00000005 0000002b ............+...
01-23 17:49:06.876: INFO/DEBUG(16639): 41242d90 4081ddd8 00000000 00000011 41242940 ...@........@)$A
01-23 17:49:06.876: INFO/DEBUG(16639): 41242da0 00000000 5788c9d0 5788d0c8 00000000 .......W...W....
01-23 17:49:06.876: INFO/DEBUG(16639): 41242db0 00000028 0000003b 00000000 40f9f128 (...;.......(..@
01-23 17:49:06.876: INFO/DEBUG(16639): memory near r3:
01-23 17:49:06.876: INFO/DEBUG(16639): 4081fc78 407a1dfc 407a1e88 407a1efc 407a1f38 ..z@..z@..z@8.z@
01-23 17:49:06.876: INFO/DEBUG(16639): 4081fc88 407cc061 407ce9b5 407e5351 407e1651 a.|@..|@QS~@Q.~@
01-23 17:49:06.876: INFO/DEBUG(16639): 4081fc98 00000000 00000000 00000000 400cd02d ............-..@
01-23 17:49:06.876: INFO/DEBUG(16639): 4081fca8 400c0748 400bfe44 400bf9b8 400bfa94 H..@D..@...@...@
01-23 17:49:06.876: INFO/DEBUG(16639): 4081fcb8 400c0ba4 401068dc 40106538 401139f4 ...@.h.@8e.@.9.@
01-23 17:49:06.876: INFO/DEBUG(16639): memory near r5:
01-23 17:49:06.876: INFO/DEBUG(16639): 39efffe8 ffffffff ffffffff ffffffff ffffffff ................
01-23 17:49:06.876: INFO/DEBUG(16639): 39effff8 ffffffff ffffffff ffffffff ffffffff ................
01-23 17:49:06.876: INFO/DEBUG(16639): 39f00008 ffffffff ffffffff ffffffff ffffffff ................
01-23 17:49:06.876: INFO/DEBUG(16639): 39f00018 ffffffff ffffffff ffffffff ffffffff ................
01-23 17:49:06.876: INFO/DEBUG(16639): 39f00028 ffffffff ffffffff ffffffff ffffffff ................
01-23 17:49:06.876: INFO/DEBUG(16639): memory near r6:
01-23 17:49:06.876: INFO/DEBUG(16639): 5f6063d8 79724320 506f7470 43206f72 65205053 CryptoPro CSP e
01-23 17:49:06.876: INFO/DEBUG(16639): 5f6063e8 72697078 69207365 006c206e 00000000 xpires in l.....
01-23 17:49:06.876: INFO/DEBUG(16639): 5f6063f8 00000000 00000000 00000000 00000000 ................
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606408 00000000 00000000 00000000 00000000 ................
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606418 00000000 00000000 00000000 00000000 ................
01-23 17:49:06.876: INFO/DEBUG(16639): memory near fp:
01-23 17:49:06.876: INFO/DEBUG(16639): 57cceac0 000005db 5dcfe9ee 5dc40f38 00000000 .......]8..]....
01-23 17:49:06.876: INFO/DEBUG(16639): 57ccead0 00000000 00000000 5ddc7b87 00000000 .........{.]....
01-23 17:49:06.876: INFO/DEBUG(16639): 57cceae0 424cc7c0 00000001 0002007a 00010002 ..LB....z.......
01-23 17:49:06.876: INFO/DEBUG(16639): 57cceaf0 5dd23db2 4121e918 00000019 5dccad8d .=.]..!A.......]
01-23 17:49:06.876: INFO/DEBUG(16639): 57cceb00 5dc40f4c 00000000 00000000 00000000 L..]............
01-23 17:49:06.876: INFO/DEBUG(16639): memory near ip:
01-23 17:49:06.876: INFO/DEBUG(16639): 41242940 5dc3daae 57834ca8 57ccd470 415cc000 ...].L.Wp..W..\A
01-23 17:49:06.876: INFO/DEBUG(16639): 41242950 42314cd0 00000007 5f606da8 00000000 .L1B.....m`_....
01-23 17:49:06.876: INFO/DEBUG(16639): 41242960 5f606ddc 00000011 00010008 4079cec0 .m`_..........y@
01-23 17:49:06.876: INFO/DEBUG(16639): 41242970 00000000 00000000 56ddf070 57831300 ........p..V...W
01-23 17:49:06.876: INFO/DEBUG(16639): 41242980 00000000 42356440 00000000 00004000 ....@d5B.....@..
01-23 17:49:06.876: INFO/DEBUG(16639): memory near sp:
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606218 5f6063f8 407c2ecd 5f60623c 41242d90 .c`_..|@<b`_.-$A
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606228 00000000 39f00009 df0027ad 00000000 .......9.'......
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606238 41242d90 41242940 5f606348 5ee082c4 .-$A@)$AHc`_...^
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606248 00000002 39f00009 ffffffff 57cce110 .......9.......W
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606258 5f4febac 41242d90 00000000 5f6063f8 ..O_.-$A.....c`_
01-23 17:49:06.876: INFO/DEBUG(16639): code around pc:
01-23 17:49:06.876: INFO/DEBUG(16639): 407ce808 f832e00b 1e4d1b02 d9052d7e d90142a1 ..2...M.~-...B..
01-23 17:49:06.884: INFO/DEBUG(16639): 407ce818 e0023003 e0003002 f1133001 d2f033ff .0...0...0...3..
01-23 17:49:06.884: INFO/DEBUG(16639): 407ce828 6940bd30 68834770 33106900 0040eb03 0.@ipG.h.i.3..@.
01-23 17:49:06.884: INFO/DEBUG(16639): 407ce838 b5704770 4614460d f7ff461e 4622fff4 pGp..F.F.F...."F
01-23 17:49:06.884: INFO/DEBUG(16639): 407ce848 0145eb00 e8bd4630 f7ff4070 b530be97 ..E.0F..p@....0.
01-23 17:49:06.884: INFO/DEBUG(16639): code around lr:
01-23 17:49:06.884: INFO/DEBUG(16639): 407c4ea0 f81cf7fe bd3e4620 b5134603 a801460c .... F>..F...F..
01-23 17:49:06.884: INFO/DEBUG(16639): 407c4eb0 f7fd4619 4621ffef f7fe9801 f009ffe7 .F....!F........
01-23 17:49:06.884: INFO/DEBUG(16639): 407c4ec0 4604fcb4 f7fea801 4620f809 b537bd1c ...F...... F..7.
01-23 17:49:06.884: INFO/DEBUG(16639): 407c4ed0 46144601 461da801 ffdcf7fd 462968e3 .F.F...F.....h)F
01-23 17:49:06.884: INFO/DEBUG(16639): 407c4ee0 065b9801 f7fed507 f3bfffd1 61208f5e ..[.........^. a
01-23 17:49:07.071: INFO/BootReceiver(358): Copying /data/tombstones/tombstone_02 to DropBox (SYSTEM_TOMBSTONE)
Также keyStore.getKey либо keyStore.getEntry выполняются ОЧЕНЬ долго
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Добрый день. Что возвращает stringToChars? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 09.01.2014(UTC) Сообщений: 25 Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
chars (без нуля) - сейчас проверю с финальным нулем
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 09.01.2014(UTC) Сообщений: 25 Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
Не помогло ни с +1 ни без него Код:
static public char[] stringToChars(String string)
{
int len = string.length();
char[] chars = new char[len+1];
string.getChars(0, string.length(), chars, 0);
chars[len] = 0;
return chars;
}
Также очень долго думает и потом падает Отредактировано пользователем 23 января 2014 г. 19:46:35(UTC)
| Причина: Дополнение
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
А в самом demo-приложении примеры работают? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 09.01.2014(UTC) Сообщений: 25 Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
В демо-приложении нет настройки об отключении пинкода. При включенном пинкоде - работает.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Если пароль на контейнер не установлен, то попробуйте передать null (store.getKey(alias, null)). Если использовать getKey(alias, null) - окно ввода пин-кода появляется? Какой алиас вашего ключа? Отредактировано пользователем 24 января 2014 г. 12:54:32(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 09.01.2014(UTC) Сообщений: 25 Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
Один алиас для всего Код:
private final String _keyAlias = "keySt";
Нельзя же сохранить приватный ключ с нулевым пинкодом? Или вы про пароль к контейнеру, который передается в keyStore.load(null,null)
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Я про то, что если вызывать store.getKey(), то пароль не важен - должно появиться окно для ввода пин-кода (в функцию можно передать null вместо пароля); если использовать store.getEntry(), то можно передать пароль, и окно для ввода пин-кода не появится. Можно сохранить контейнер без пароля: если не задать его в окне ввода пин-кода при сохранении с помощью setKeyEntry() либо если не задать его в параметрах при сохранении с помощью setEntry(). Отредактировано пользователем 24 января 2014 г. 16:47:42(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 09.01.2014(UTC) Сообщений: 25 Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
Когда я вызываю store.getKey(alias, null) - я после ОЧЕНЬ ПРОДОЛЖИТЕЛЬНОГО (3 минуты) ожидания получаю ключ, а после вызова store.getEntry(alias, null) - получаю объект, java.security.KeyStore$TrustedCertificateEntry, который не конвертится к JCPPrivateKeyEntry как указано в примерах.
попытка использовать (полученый через getKey) ключ для подписи - вызывает падение и дамп модуля JNI
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close