Статус: Новичок
Группы: Участники
Зарегистрирован: 29.04.2015(UTC) Сообщений: 2 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png)
|
Здравствуйте! Периодически наблюдаю NullPointerException при генерации ЭЦП GOST3411withGOST3410EL на JCP 1.0.53: Код:java.lang.NullPointerException
at ru.CryptoPro.JCP.Sign.b.engineUpdate(Unknown Source)
at java.security.Signature.update(Signature.java:715)
at java.security.Signature.update(Signature.java:698)
Код подписывания обычный, вида Код:
KeyStore hdImageStore;
hdImageStore = KeyStore.getInstance("HDImageStore");
hdImageStore.load(null, null);
PrivateKey key = (PrivateKey) hdImageStore.getKey(keyName, keyPassword);
Signature signature = Signature.getInstance("GOST3411withGOST3410EL");
signature.initSign(key);
byte[] textBytes = ...
signature.update(textBytes);
byte[] result = signature.sign();
Подскажите, что это может быть?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
Здравствуйте. Выведите key существует? |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 29.04.2015(UTC) Сообщений: 2 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png)
|
Здравствуйте. Да, key существовал в момент создания/инициализации объекта Signature. Я несколько упростил код, мы кэшируем проинициализированные объекты Signature и многократно используем их из разных потоков для выполнения пары операций update/sign. Вот так: Код:
Signature signature = SIGNATURE_CACHE.get(keyName, new Callable<Signature>() {
@Override
public Signature call() throws Exception {
return load();
}
});
signature.update(textBytes);
byte[] result = signature.sign();
Метод load вызывается однократно, при инициализации кэша и тело его выглядит так: Код:
KeyStore hdImageStore = KeyStore.getInstance("HDImageStore");
hdImageStore.load(null, null);
final PrivateKey key = (PrivateKey) hdImageStore.getKey(keyName, null);
if (key == null) {
throw new NullPointerException("Failed to load key " + keyName + " !");
}
Signature signature = Signature.getInstance("GOST3411withGOST3410EL");
signature.initSign(key);
Это работает почти всегда, но редко бывает так, что signature.update() начинает выбрасывать NPE при каждом вызове, как будто какое-то внутреннее состояние портится. Можно ли вообще кешировать объекты Signature или нужно всегда их пересоздавать? Отредактировано пользователем 13 мая 2015 г. 12:53:35(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
Здраствуйте. По 1.0.53 сложно сказать. Попробуйте: 1) выполнять еще initSign() перед update; 2) JCP 1.0.54 или 2.0. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close