Статус: Участник
Группы: Участники
Зарегистрирован: 09.01.2014(UTC) Сообщений: 25 Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
Получается следующая ошибка: java.lang.NullPointerException: invalid null input Код:
byte[] sign;
try
{
X509Certificate certificate;
PrivateKey privateKey;
KeyStore ks = KeyStore.getInstance(JCSP.HD_STORE_NAME, JCSP.PROVIDER_NAME);
ks.load(null, null);
int i = 0;
String aliasName = null;
Enumeration<String> enu = ks.aliases();
while (enu.hasMoreElements())
{
aliasName = enu.nextElement();
if (i == certNum)
{
break;
}
i++;
}
if (i == ks.size())
{
return null;
}
KeyStore.ProtectionParameter protectedParam =
new KeyStore.PasswordProtection(pin.toCharArray());
KeyStore.Entry entryO = ks.getEntry(aliasName, protectedParam); /// <- вот здесь выбрасывают исключение
...
} catch (Exception e)
{
}
При этом ks.aliases очевидно не пуст Как такую ошибку интерпретировать и исправить? UPD: Версия SDK и ACSP.apk на устройстве: 2.0.37363 Отредактировано пользователем 7 августа 2014 г. 16:19:05(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,962 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Возможно, в контейнере нет сертификата. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 09.01.2014(UTC) Сообщений: 25 Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
А как это проверить/поправить. Что такое тогда alias и как перечислить только те из них, которые содержат ключевую пару?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,962 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Алиас - название контейнера. Попробуйте использовать getKey() и getCertificate(). |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 09.01.2014(UTC) Сообщений: 25 Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
Продолжает падать, исключение не выдает: Код:
KeyStore ks = KeyStore.getInstance(JCSP.HD_STORE_NAME, JCSP.PROVIDER_NAME);
ks.load(null, null);
if (aliasName == null || aliasName.isEmpty())
{
throw new ModuleException(303, "Cert not found");
}
Key entryO = ks.getKey(aliasName, pin.toCharArray());
certificate = (X509Certificate) ks.getCertificate(aliasName);
privateKey = (PrivateKey) entryO;
if (privateKey == null || certificate == null)
{
throw new Exception("Private key or/and certificate is null.");
}
else
{
Log.i(TAG, "Certificate: " + certificate.getSubjectDN());
}
final String privateKeyAlgorithm = privateKey.getAlgorithm();
String signAlgorithm = JCP.GOST_EL_SIGN_NAME;
Signature sn = Signature.getInstance(signAlgorithm, JCSP.PROVIDER_NAME);
sn.initSign(privateKey);
sn.update(data);
sign = sn.sign(); //Тут падает в JNI
Стэк ошибки: Код:
10-16 14:44:11.255: WARN/dalvikvm(28480): JNI WARNING: JNI method called with exception pending
10-16 14:44:11.255: WARN/dalvikvm(28480): in Lru/CryptoPro/JCSP/MSCAPI/CAPI;.cryptSignHash:(JILjava/lang/String;I[B[I)I (CallIntMethodV)
10-16 14:44:11.255: WARN/dalvikvm(28480): Pending exception is:
10-16 14:44:11.255: INFO/dalvikvm(28480): java.lang.NullPointerException:
10-16 14:44:11.255: INFO/dalvikvm(28480): at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:142)
10-16 14:44:11.255: INFO/dalvikvm(28480): at android.app.AlertDialog.<init>(AlertDialog.java:98)
10-16 14:44:11.255: INFO/dalvikvm(28480): at ru.CryptoPro.JCSP.tools.common.window.CSPDialog.<init>((null):-1)
10-16 14:44:11.255: INFO/dalvikvm(28480): at ru.CryptoPro.JCSP.tools.common.window.CSPPin.<init>((null):-1)
10-16 14:44:11.255: INFO/dalvikvm(28480): at ru.CryptoPro.JCSP.MSCAPI.CAPI.cryptSignHash(Native Method)
10-16 14:44:11.255: INFO/dalvikvm(28480): at ru.CryptoPro.JCSP.MSCAPI.j.a((null):-1)
10-16 14:44:11.255: INFO/dalvikvm(28480): at ru.CryptoPro.JCSP.MSCAPI.i.b((null):-1)
10-16 14:44:11.255: INFO/dalvikvm(28480): at ru.CryptoPro.JCSP.MSCAPI.b.a((null):-1)
10-16 14:44:11.255: INFO/dalvikvm(28480): at ru.CryptoPro.JCSP.Key.AbstractKeySpec.signature((null):-1)
10-16 14:44:11.255: INFO/dalvikvm(28480): at ru.CryptoPro.JCSP.Sign.CryptoProSign.engineSign((null):-1)
10-16 14:44:11.255: INFO/dalvikvm(28480): at ru.CryptoPro.JCSP.Sign.JCSPGostElSign.engineSign((null):-1)
10-16 14:44:11.255: INFO/dalvikvm(28480): at java.security.Signature.sign(Signature.java:318)
10-16 14:44:11.255: INFO/dalvikvm(28480): at ru.mindpass.android.cryptopro.CryptoProModule.getSign(CryptoProModule.java:196)
Похоже, криптобиблиотеки зачем-то понадобился гуй, хотя она в фоновом таске, в соответствии с Best Practices по поводу рабочих потоков
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,962 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
В CSPConfig есть функция registerActivityContext, ее следует вызвать при смене activity и передавать ей контекст activity для отображения диалоговых окон. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 09.01.2014(UTC) Сообщений: 25 Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
Все еще падает из AsyncTask внутри сервиса Код:
Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:121)
at android.app.Dialog.<init>(Dialog.java:107)
at android.app.AlertDialog.<init>(AlertDialog.java:114)
at android.app.AlertDialog.<init>(AlertDialog.java:98)
at ru.CryptoPro.JCSP.tools.common.window.CSPDialog.<init>(Unknown Source)
at ru.CryptoPro.JCSP.tools.common.window.CSPPin.<init>(Unknown Source)
at ru.CryptoPro.JCSP.MSCAPI.CAPI.cryptSignHash(Native Method)
Если же предоставить Looper - то сервис зависает "наглухо" Если в качестве контекста передать не Activity, а сам Service - то получаю сообщение о неправильном токене Отредактировано пользователем 22 октября 2014 г. 19:24:41(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,962 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Автор: МайндпассСемен Если же предоставить Looper - то сервис зависает "наглухо" Если в качестве контекста передать не Activity, а сам Service - то получаю сообщение о неправильном токене
Спасибо, проверим. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close